package br.edu.unirn.lab3.classes;

/**
 * *
 * Classe responsavel por administrar toda a manipulacao do diretorio a partir
 * da raiz
 *
 * @author Jefferson
 *
 */
public class Arvore {
    //Atributos

    private Diretorio atual;
    private Diretorio raiz;

    //Métodos
    /**
     * Método responsavel pela remomoção de uma pasta.
     *
     * @param nome
     */
    public boolean remover(String nome) {
        boolean deuCerto = false;
        if (atual != null) {
            for (int i = 0; i < atual.getLista().size(); i++) {
                if (atual.getLista().get(i).getNomePasta().toLowerCase().equals(nome.toLowerCase())) {
                    deuCerto = true;
                    atual.getLista().remove(i);
                    break;
                }
            }
        }
        return deuCerto;
    }

    /**
     * Metodo responsavel por voltar a pasta anterior
     */
    public boolean acessarAnterior() {
        if (atual == raiz) {
            return false;
        } else {
            atual = atual.getDiretorioAnterior();
            return true;
        }
    }

    /**
     * Metodo responsavel por acessar os diretorios filhos
     *
     * @param nome
     */
    public boolean acessarDiretorio(String nome) {
        boolean deuCerto = false;
        if (atual != null) {
            for (int i = 0; i < atual.getLista().size(); i++) {
                if (atual.getLista().get(i).getNomePasta().toLowerCase().equals(nome.toLowerCase())) {
                    atual = atual.getLista().get(i);
                    deuCerto = true;
                    break;
                }
            }
        }
        return deuCerto;
    }

    /**
     * Metodo responsavel pela impressao das pastas
     *
     * @return
     */
    public String imprimir() {
        String impres = "";
        if (this.atual != null) {
            for (int i = 0; i < atual.getLista().size(); i++) {
                impres += atual.getLista().get(i).getNomePasta() + "\n";
            }
        }
        return impres;
    }

    /**
     * Metodo responsavel por adicionar elementos no diretorio.
     *
     * @param nome
     */
    public boolean adicionar(String nome) {
        boolean inseriu = false;
        if (this.atual != null) {
            boolean existe = false;
            for (int i = 0; i < atual.getLista().size(); i++) {
                if (atual.getLista().get(i).getNomePasta().toLowerCase().equals(nome.toLowerCase())) {
                    existe = true;
                    break;
                }
            }
            if (!existe) {
                Diretorio novo = new Diretorio();
                novo.setNomePasta(nome);
                novo.setDiretorioAnterior(atual);
                atual.getLista().add(novo);
                inseriu = true;
            }
        } else {
            Diretorio novo = new Diretorio();
            novo.setNomePasta(nome);
            atual = novo;
            setRaiz(novo);
            inseriu = true;
        }

        return inseriu;
    }

    //Getts and Setts
    public Diretorio getAtual() {
        return atual;
    }

    public void setAtual(Diretorio atual) {
        this.atual = atual;
    }

    /**
     * @return the raiz
     */
    public Diretorio getRaiz() {
        return raiz;
    }

    /**
     * @param raiz the raiz to set
     */
    public void setRaiz(Diretorio raiz) {
        this.raiz = raiz;
    }
}
